package 多线程;

/*
   线程的创建和启动
    1、Java语言的JVM允许程序运行多个线程,它通过java.lang.Thread类来体现
    2、Thread类的特性
         每个线程都是通过某个特定Thread对象的run()方法来完成操作的,经常把run()方法的主体称为线程体
         通过该Thread对象的start()方法来启动这个线程,而非直接调用run()


   多线程的创建,方式一,继承于Thread类
    1、创建一个继承于Thread类的子类
    2、重写Thread类的run() --> 将此线程声明的操作声明在run()中
    3、创建Thread类的子类的对象
    4、通过此对象调用start()

   线程的创建和启动:Java语言的JVM允许程序运行多个线程,它通过java.lang.Thread类来体现

   Thread类的特性
    1、每个线程都是通过某个特定Thread对象的run()方法来完成操作的,经常把run()方法的主体称为线程体
    2、通过该Thread对象的start()方法来启动这个线程,而非直接调用run()方法
 */

public class ThreadTest01 {
    public static void main(String[] args) {
        MyThread01 myThread1 = new MyThread01();
        myThread1.start(); //启动当前线程并调用当前线程的run()方法

        //如果需要再启动一个线程,不可以仍然让已经start()的线程去执行,会报异常
        //myThread.start();

        //如果需要再启动一个线程,则需要再创建一个对象,用该对象的start()方法去执行
        MyThread01 myThread2 = new MyThread01();
        myThread2.start();

        for (int i = 0; i < 100; i++) {
            System.out.println(">>>" + ":" + Thread.currentThread().getName());
        }

        //创建Thread类的匿名子类的方法(技巧)
        new Thread(){
            @Override
            public void run() {
                System.out.println("苏州大学:" + Thread.currentThread().getName());
            }
        }.start();
    }
}

class MyThread01 extends Thread{ //遍历100以内的所有偶数

    //重写Thread类的run()
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            if(i % 2 == 0){
                System.out.println(i + ":" + Thread.currentThread().getName()); //获取当前线程名称
            }
        }
    }
}


